Assembly Language প্রোগ্রামিংয়ে ইনস্ট্রাকশন এবং সিনট্যাক্স সম্পর্কে সঠিক ধারণা থাকা প্রয়োজন, কারণ এটি সরাসরি প্রসেসরের সাথে কাজ করে। Assembly Instructions হল কম্পিউটারের CPU-কে কী কাজ করতে হবে তা নির্দেশ দেয়, আর Syntax নির্দেশনাগুলিকে সঠিকভাবে লেখার নিয়ম নির্ধারণ করে।
Assembly Instructions:
Assembly Language-এ বিভিন্ন ধরনের ইনস্ট্রাকশন রয়েছে, যা CPU-তে বিভিন্ন অপারেশন সম্পাদন করতে ব্যবহৃত হয়:
- ডাটা মুভমেন্ট ইনস্ট্রাকশন (Data Movement Instructions):
MOV: ডেটা একটি স্থান থেকে অন্য স্থানে স্থানান্তর করে।
MOV AX, 5 ; AX রেজিস্টারে ৫ রাখে MOV BX, AX ; BX রেজিস্টারে AX-এর মান কপি করে
- গাণিতিক ইনস্ট্রাকশন (Arithmetic Instructions):
ADD: দুই মান যোগ করে এবং ফলাফল গন্তব্য রেজিস্টারে রাখে।
ADD AX, BX ; AX এবং BX-এর মান যোগ করে AX-এ ফল রাখেSUB: এক মান থেকে আরেক মান বিয়োগ করে।
SUB AX, 1 ; AX থেকে ১ বিয়োগ করে
- লজিক্যাল ইনস্ট্রাকশন (Logical Instructions):
AND: দুটি বিটের লজিক্যাল AND অপারেশন করে।
AND AX, 0x0F ; AX-এর সাথে 0x0F AND করেOR: লজিক্যাল OR অপারেশন করে।
OR AX, BX ; AX এবং BX-এর বিটগুলিতে OR অপারেশন করে
- ডাটা তুলনা ইনস্ট্রাকশন (Comparison Instructions):
CMP: দুটি মান তুলনা করে এবং ফলাফলের ভিত্তিতে ফ্ল্যাগ সেট করে।
CMP AX, BX ; AX এবং BX তুলনা করে
- ব্রাঞ্চিং ইনস্ট্রাকশন (Branching Instructions):
JMP: নির্দিষ্ট ঠিকানায় জাম্প করে।
JMP label ; 'label' লেবেলে জাম্প করেJE: ফলাফল শূন্য হলে জাম্প করে।
JE label ; ZF (Zero Flag) সেট থাকলে 'label'-এ জাম্প করে
- স্ট্যাক অপারেশন ইনস্ট্রাকশন (Stack Operation Instructions):
PUSH: স্ট্যাকে ডেটা রাখে।
PUSH AX ; AX রেজিস্টারের মান স্ট্যাকে রাখেPOP: স্ট্যাক থেকে ডেটা বের করে।
POP BX ; স্ট্যাক থেকে মান নিয়ে BX-এ রাখে
Assembly Syntax:
Assembly Language-এর Syntax-এর মাধ্যমে নির্দেশনাগুলি সঠিকভাবে লেখা হয়। কিছু সাধারণ নিয়ম:
- ইনস্ট্রাকশন ফর্ম্যাট:
- ইনস্ট্রাকশন সাধারণত অপকোড এবং অপারেন্ড নিয়ে গঠিত।
- উদাহরণ:
MOV AX, BX
- কমেন্টস (Comments):
Assembly কোডে মন্তব্য যোগ করতে
;ব্যবহার করা হয়।MOV AX, 5 ; AX-এ ৫ রাখে
- লেবেল (Labels):
লেবেল প্রোগ্রামের বিভিন্ন অংশ চিহ্নিত করতে ব্যবহৃত হয়।
start: MOV AX, 1 JMP end end: NOP ; কোনো কাজ করে না
অপারেন্ড টাইপ:
Assembly Language-এ অপারেন্ড বিভিন্ন ধরনের হতে পারে:
Immediate Operand: সরাসরি মান ব্যবহার করা হয়।
MOV AX, 10 ; AX-এ সরাসরি ১০ রাখেRegister Operand: রেজিস্টার থেকে ডেটা ব্যবহার করা হয়।
MOV BX, AX ; BX-এ AX-এর মান কপি করেMemory Operand: মেমোরি লোকেশন থেকে ডেটা ব্যবহার করা হয়।
MOV AX, [1234h] ; মেমোরি লোকেশন 1234h থেকে ডেটা AX-এ রাখে
সারসংক্ষেপ
Assembly Instructions এবং Syntax সঠিকভাবে বোঝা প্রোগ্রামারদের CPU-র কাজের প্রবাহ নিয়ন্ত্রণ করতে এবং ডেটা প্রসেসিং সহজ করতে সহায়তা করে। প্রোগ্রামিংয়ের সময় ইনস্ট্রাকশন ফর্ম্যাট, কমেন্টস, লেবেল, এবং অপারেন্ড টাইপের ব্যবহার Assembly Language-এ কার্যকর প্রোগ্রাম তৈরি করতে গুরুত্বপূর্ণ ভূমিকা পালন করে।
Data Movement Instructions:
- সংজ্ঞা: এই নির্দেশনাগুলি ডেটাকে এক স্থান থেকে অন্য স্থানে স্থানান্তর করার জন্য ব্যবহৃত হয়, যেমন রেজিস্টার থেকে মেমোরি বা রেজিস্টার থেকে রেজিস্টার।
- উদাহরণ:
MOV: একটি উৎস থেকে গন্তব্যে ডেটা স্থানান্তর।
MOV AX, BX ; BX এর ডেটা AX-এ স্থানান্তর করা।- PUSH: স্ট্যাকের উপরে ডেটা সংরক্ষণ।
- POP: স্ট্যাক থেকে ডেটা বের করা।
Arithmetic Instructions:
- সংজ্ঞা: এই নির্দেশনাগুলি গণিতের মৌলিক অপারেশন, যেমন যোগ, বিয়োগ, গুণ, এবং ভাগ সম্পন্ন করার জন্য ব্যবহৃত হয়।
- উদাহরণ:
ADD: দুই অপারেন্ডের যোগফল।
ADD AX, 10 ; AX-এ ১০ যোগ করা।- SUB: বিয়োগ অপারেশন।
- MUL: গুণের জন্য ব্যবহার।
- DIV: ভাগফল এবং ভাগশেষ নির্ণয়ের জন্য।
Logical Instructions:
- সংজ্ঞা: এই নির্দেশনাগুলি লজিক্যাল অপারেশন যেমন AND, OR, NOT, XOR সম্পন্ন করার জন্য ব্যবহৃত হয়। এগুলি সাধারণত শর্ত যাচাই, বিট ম্যানিপুলেশন এবং ডেটা বিশ্লেষণে ব্যবহৃত হয়।
- উদাহরণ:
AND: বিটওয়াইস AND অপারেশন।
AND AX, BX ; AX এবং BX এর বিটওয়াইস AND।- OR: বিটওয়াইস OR অপারেশন।
- XOR: বিটওয়াইস XOR অপারেশন।
- NOT: বিট উল্টানোর জন্য।
Control Instructions:
- সংজ্ঞা: এই নির্দেশনাগুলি প্রোগ্রামের প্রবাহ নিয়ন্ত্রণ করতে ব্যবহৃত হয়, যেমন লুপ, শর্তাধীন শাখা, এবং ফাংশন কল।
- উদাহরণ:
JMP: নির্দিষ্ট ঠিকানায় সরাসরি জাম্প করা।
JMP START ; START লেবেলে সরাসরি লাফ দেওয়া।- JZ (Jump if Zero): যদি ফলাফল শূন্য হয় তবে নির্দিষ্ট ঠিকানায় জাম্প করা।
- CALL: সাবরুটিন কল করা।
- RET: সাবরুটিন থেকে ফিরে আসা।
| Instruction Type | Function | Examples |
|---|---|---|
| Data Movement | ডেটা স্থানান্তর | MOV, PUSH, POP |
| Arithmetic | গণিতের মৌলিক অপারেশন | ADD, SUB, MUL, DIV |
| Logical | বিটওয়াইস এবং লজিক্যাল অপারেশন | AND, OR, XOR, NOT |
| Control | প্রোগ্রামের প্রবাহ নিয়ন্ত্রণ | JMP, JZ, CALL, RET |
সারসংক্ষেপ
Instruction গুলি চারটি প্রধান ধরণের মধ্যে ভাগ করা যায়: Data Movement, Arithmetic, Logical, এবং Control। Data Movement ডেটা স্থানান্তর করে, Arithmetic গণিত অপারেশন সম্পন্ন করে, Logical বিটওয়াইস অপারেশন পরিচালনা করে, এবং Control প্রোগ্রামের প্রবাহ নিয়ন্ত্রণ করে। এগুলি মিলিতভাবে প্রোগ্রামের কার্যক্রম পরিচালনা এবং CPU-র কাজ সম্পন্ন করতে সহায়তা করে।
Assembly কোডে বিভিন্ন অংশ থাকে, যা কোডের লজিক এবং গঠন বোঝার জন্য গুরুত্বপূর্ণ। এই অংশগুলির মধ্যে Label, Mnemonics এবং Operands প্রধান ভূমিকা পালন করে।
Label
- সংজ্ঞা: Label একটি নির্দেশক যা প্রোগ্রামের নির্দিষ্ট স্থানে একটি চিহ্ন বা নাম দেয়। এটি প্রোগ্রামের মধ্যে একটি সুনির্দিষ্ট স্থানে নিয়ন্ত্রণ প্রবাহ পরিচালনা করার জন্য ব্যবহৃত হয়, যেমন লুপ শুরু বা ফাংশন ডেফিনিশনের আগে।
- বৈশিষ্ট্য:
- সাধারণত একটি শব্দ বা নাম দিয়ে চিহ্নিত হয় এবং একটি কোলন (
:) দিয়ে শেষ হয়। - এটি প্রোগ্রামের নির্দিষ্ট স্থানে জাম্প করার জন্য বা সাবরুটিন কল করার জন্য ব্যবহার করা হয়।
- সাধারণত একটি শব্দ বা নাম দিয়ে চিহ্নিত হয় এবং একটি কোলন (
উদাহরণ:
START: ; এটি একটি লেবেল MOV AX, 1
Mnemonics
- সংজ্ঞা: Mnemonics হল একটি সংক্ষিপ্ত নির্দেশনা যা CPU-কে একটি নির্দিষ্ট অপারেশন সম্পাদন করার নির্দেশ দেয়। এগুলি আসলে মানব-পঠনযোগ্য ফরম্যাটে লেখা CPU নির্দেশনা।
- বৈশিষ্ট্য:
- প্রতিটি Mnemonic একটি নির্দিষ্ট অপারেশন বোঝায়, যেমন
MOV(ডেটা স্থানান্তর),ADD(যোগ করা),SUB(বিয়োগ করা)। - Mnemonics এর সাথে অপারেশনগুলো প্রায়ই সংক্ষিপ্ত আকারে লেখা হয়।
- প্রতিটি Mnemonic একটি নির্দিষ্ট অপারেশন বোঝায়, যেমন
উদাহরণ:
MOV AX, BX ; AX রেজিস্টারে BX রেজিস্টারের মান স্থানান্তর করা ADD AX, 10 ; AX রেজিস্টারে ১০ যোগ করা
Operands
- সংজ্ঞা: Operands হল Mnemonics এর পরে থাকা ডেটা বা ভেরিয়েবল যা নির্দেশনাগুলির সাথে ব্যবহার করা হয়। এগুলি রেজিস্টার, মেমোরি অ্যাড্রেস, বা কনস্ট্যান্ট ভ্যালু হতে পারে।
- বৈশিষ্ট্য:
- Mnemonics অপারেশন করতে Operands ব্যবহার করে।
- এক বা একাধিক Operand থাকতে পারে।
উদাহরণ:
MOV AX, 5 ; এখানে ৫ হল Operand ADD BX, AX ; BX এবং AX উভয়ই Operand
Assembly Code Structure উদাহরণ
START: ; Label
MOV AX, 5 ; Mnemonic এবং Operand (AX এবং 5)
ADD AX, 10 ; Mnemonic এবং Operand (AX এবং 10)
JMP START ; Mnemonic এবং Label (START) - Label (
START): এই লেবেলটি নির্দেশ দেয় প্রোগ্রামের নির্দিষ্ট অবস্থানে। - Mnemonic (
MOV,ADD,JMP): এগুলি নির্দেশনা যা CPU-কে নির্দিষ্ট কাজ করতে বলে। - Operands (
AX,5,10): এগুলি Mnemonics এর সাথে ব্যবহৃত ডেটা বা রেজিস্টার।
Assembly Code এর গঠন প্রধানত তিনটি অংশ নিয়ে গঠিত: Label, Mnemonics, এবং Operands। Label প্রোগ্রামের নির্দিষ্ট স্থানে নির্দেশ করে, Mnemonics নির্দেশনাগুলি CPU-কে কার্যকর করতে বলে এবং Operands ডেটা বা রেজিস্টার হিসেবে ব্যবহৃত হয়।
Assembly Language-এ Addressing Mode নির্দেশ করে CPU কিভাবে অপারেন্ড বা ডেটা অ্যাক্সেস করে। Addressing Modes বিভিন্ন ধরনের হতে পারে, কিন্তু সবচেয়ে সাধারণ তিনটি Addressing Mode হলো Immediate Addressing, Register Addressing, এবং Memory Addressing। নিচে এই Addressing Modes-এর বিস্তারিত ব্যাখ্যা দেওয়া হলো:
Immediate Addressing
- সংজ্ঞা: Immediate Addressing Mode-এ অপারেন্ড সরাসরি ইনস্ট্রাকশনে থাকে। অর্থাৎ, ডেটা নিজেই কোডে লেখা হয় এবং এটি একটি রেজিস্টার বা মেমোরি অ্যাড্রেসে সংরক্ষিত নয়।
- বৈশিষ্ট্য:
- ডেটা সরাসরি নির্দেশনায় উপস্থিত থাকে।
- অপারেন্ডের জন্য অতিরিক্ত মেমোরি অ্যাক্সেসের প্রয়োজন হয় না।
উদাহরণ:
MOV AX, 5 ; AX রেজিস্টারে সরাসরি ৫ লোড করাএখানে
5হলো Immediate ডেটা, যা সরাসরি AX রেজিস্টারে লোড করা হচ্ছে।
Register Addressing
- সংজ্ঞা: Register Addressing Mode-এ অপারেন্ড CPU-র রেজিস্টারে থাকে। CPU রেজিস্টার থেকে সরাসরি ডেটা পড়তে এবং লিখতে পারে, যা মেমোরি অ্যাক্সেসের তুলনায় দ্রুততর।
- বৈশিষ্ট্য:
- CPU রেজিস্টারে ডেটা থাকা অবস্থায় অপারেশনগুলো দ্রুত সম্পন্ন হয়।
- মেমোরি অ্যাক্সেসের চেয়ে দ্রুত, কারণ রেজিস্টার অ্যাক্সেস দ্রুততর।
উদাহরণ:
MOV AX, BX ; BX রেজিস্টারের ডেটা AX রেজিস্টারে স্থানান্তর করাএখানে,
BXথেকেAXরেজিস্টারে ডেটা স্থানান্তর করা হচ্ছে।
Memory Addressing
- সংজ্ঞা: Memory Addressing Mode-এ অপারেন্ড মেমোরি অ্যাড্রেসে থাকে। CPU-কে মেমোরি অ্যাড্রেস থেকে ডেটা পড়তে বা সেখানে ডেটা লিখতে হয়।
- বৈশিষ্ট্য:
- মেমোরি অ্যাড্রেস থেকে ডেটা অ্যাক্সেস করতে মেমোরি অ্যাক্সেস টাইম লাগে, যা রেজিস্টার অ্যাক্সেসের চেয়ে ধীর।
- প্রোগ্রামে ডেটার আকার এবং অবস্থান পরিবর্তন করতে মেমোরি অ্যাড্রেস ব্যবহার করা হয়।
উদাহরণ:
MOV AX, [1234h] ; 1234h মেমোরি অ্যাড্রেস থেকে ডেটা AX রেজিস্টারে লোড করাএখানে,
1234hঠিকানা থেকে ডেটাAXরেজিস্টারে লোড করা হচ্ছে।
Addressing Modes-এর তুলনামূলক বৈশিষ্ট্য
| বৈশিষ্ট্য | Immediate Addressing | Register Addressing | Memory Addressing |
|---|---|---|---|
| অপারেন্ড অবস্থান | অপারেন্ড সরাসরি নির্দেশনায় থাকে। | অপারেন্ড রেজিস্টারে থাকে। | অপারেন্ড মেমোরি অ্যাড্রেসে থাকে। |
| গতিসীমা | দ্রুততম, কারণ কোনো মেমোরি অ্যাক্সেস নেই। | দ্রুত, কারণ রেজিস্টার অ্যাক্সেস দ্রুত। | তুলনামূলকভাবে ধীর, কারণ মেমোরি অ্যাক্সেস লাগে। |
| মেমোরি ব্যবহারের পরিমাণ | নির্দেশনায় অপারেন্ড থাকে, মেমোরি ব্যবহার হয় না। | রেজিস্টারে অপারেন্ড থাকে, কম মেমোরি ব্যবহৃত হয়। | মেমোরি অ্যাক্সেসের জন্য বেশি সময় এবং স্থান লাগে। |
| ব্যবহার ক্ষেত্র | ধ্রুবক মানের ক্ষেত্রে ব্যবহার হয়। | দ্রুত অপারেশন এবং ডেটা প্রসেসিং। | বৃহৎ আকারের ডেটা সংরক্ষণ এবং অ্যাক্সেস। |
Immediate, Register এবং Memory Addressing-এর প্রত্যেকটি Addressing Mode-এর নিজস্ব বৈশিষ্ট্য এবং ব্যবহার ক্ষেত্র রয়েছে। Immediate Addressing দ্রুত এবং সহজ, Register Addressing দ্রুততর এবং কার্যকর, আর Memory Addressing বড় ডেটা অ্যাক্সেসের জন্য উপযোগী।
Assembly Language প্রোগ্রামিংয়ে Syntax এবং Pseudo-instructions অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। Syntax হলো Assembly প্রোগ্রামের লেখার নিয়মাবলী এবং Pseudo-instructions হলো এমন নির্দেশনা যা সরাসরি মেশিন কোডে রূপান্তরিত হয় না, তবে অ্যাসেম্বলার প্রোগ্রামকে আরও সহজে লেখার জন্য ব্যবহার করা হয়।
Syntax (Assembly Language এর নিয়মাবলী):
Assembly Language-এর Syntax হলো কোড লেখার নির্দিষ্ট নিয়ম এবং গঠন, যা CPU এবং অ্যাসেম্বলার বুঝতে পারে। সাধারণ Syntax গঠন নিম্নরূপ:
- Label (ঐচ্ছিক): কোডের নির্দিষ্ট স্থানে চিহ্নিত করতে ব্যবহৃত।
- Mnemonic: নির্দেশনাটির নাম, যেমন
MOV,ADD,SUBইত্যাদি। - Operands: Mnemonic-এর পরে এক বা একাধিক অপারেন্ড থাকে, যা নির্দেশনার উপর নির্ভর করে।
Syntax উদাহরণ:
label_name: MOV AX, BX ; AX রেজিস্টারে BX এর ডেটা স্থানান্তর করা
ADD AX, 10 ; AX রেজিস্টারে ১০ যোগ করাSyntax-এর নিয়মাবলী:
- প্রতিটি নির্দেশনা একটি নতুন লাইনে শুরু হয়।
- Mnemonic-এর পরে অপারেন্ড থাকে, যা কমা দিয়ে পৃথক করা হয়।
- কমেন্ট যুক্ত করার জন্য
;ব্যবহার করা হয় এবং এটি লাইনটির বাকি অংশকে উপেক্ষা করে।
Pseudo-instructions:
Pseudo-instructions হলো এমন নির্দেশনা যা অ্যাসেম্বলার দ্বারা সরাসরি মেশিন কোডে রূপান্তরিত হয় না, তবে কোড লেখার সময় এটি ব্যবহার করা প্রোগ্রামারদের জন্য সুবিধাজনক। অ্যাসেম্বলার Pseudo-instructions-কে মেশিন কোড নির্দেশনায় পরিবর্তন করে।
Pseudo-instructions উদাহরণ:
- MOV: সাধারণত একটি Mnemonic হলেও কিছু ক্ষেত্রে অ্যাসেম্বলার এটি Pseudo-instruction হিসাবে ব্যবহার করতে পারে।
- NOP: কোনো অপারেশন না করে CPU-এর একক সাইকেল নষ্ট করে। এটি প্রায়ই টাইমিং অ্যাডজাস্টমেন্টের জন্য ব্যবহৃত হয়।
EQU: একটি কনস্ট্যান্ট বা নামকে নির্দিষ্ট মান দেওয়ার জন্য ব্যবহৃত হয়।
MAX_LEN EQU 100 ; MAX_LEN নামের একটি কনস্ট্যান্ট তৈরি এবং ১০০ মান সংরক্ষণDB, DW, DD: মেমোরিতে ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়।
msg DB 'Hello, World!', 0 ; 'Hello, World!' স্ট্রিং এবং শেষের 0 বাইট সংরক্ষণ num DW 1234h ; 1234h মান ২-বাইটের ডেটা হিসেবে সংরক্ষণ
Pseudo-instructions এর ব্যবহার এবং সুবিধা
- কোড সহজ করা: Pseudo-instructions ব্যবহার করে প্রোগ্রামিংকে সহজ করা যায়, কারণ এগুলি কোডকে আরও পাঠযোগ্য এবং পরিচালনাযোগ্য করে।
- স্ট্রাকচার প্রদান: প্রোগ্রামে ডেটা সেগমেন্ট এবং কনস্ট্যান্ট ডেফিনিশনের মাধ্যমে স্ট্রাকচার প্রদান করে।
- সাধারণ কাজ সহজ করা: কিছু সাধারণ কাজ, যেমন ডেটা ইনিশিয়ালাইজ করা বা নির্দিষ্ট অ্যাসেম্বলি অপারেশন সরলীকৃত করা।
সারসংক্ষেপ
Assembly Language প্রোগ্রামিংয়ে সঠিক Syntax ব্যবহারের মাধ্যমে প্রোগ্রামটি কার্যকরী হয়, এবং Pseudo-instructions প্রোগ্রামারদের জন্য কোড লেখা সহজ করে তোলে। Pseudo-instructions সরাসরি মেশিন কোডে রূপান্তরিত না হলেও, অ্যাসেম্বলার এগুলিকে সঠিক নির্দেশনায় রূপান্তর করে। Syntax এবং Pseudo-instructions একসাথে Assembly প্রোগ্রামিংয়ে কার্যক্ষমতা এবং ব্যবহারযোগ্যতা বৃদ্ধি করতে সাহায্য করে।
Read more